public class PalindromeList {
    public boolean chkPalindrome(ListNode A) {
        if(A==null){
            return true;
        }
        //找到链表的中间结点
        ListNode fast=A;
        ListNode slow=A;

        while(fast!=null&&fast.next!=null){
            fast=fast.next.next;
            slow=slow.next;
        }
        //将后半部分链表反转
        ListNode prev=slow;
        ListNode cur=slow.next;
        while(cur!=null){
            ListNode temp=cur.next;
            cur.next=prev;
            prev=cur;
            cur=temp;
        }
        //前后开始遍历，如果前后的值不相等说明不等
        while(A!=prev){
            if(A.val!=prev.val){
                return false;
            }
            if(A.next==slow){
                //如果A的下一个是slow，说明链表是偶数情况
                //判断链表偶数情况
                return true;
            }

            prev=prev.next;
            A=A.next;

        }
        //判断链表奇数情况
        return true;

    }
}